www.gusucode.com > VC++下的串行数据通信以及八个串口编程实例- > VC++下的串行数据通信以及八个串口编程实例-/第7章 智能安防报警系统/SetPara3Dlg.cpp
// SetPara3Dlg.cpp : implementation file // #include "stdafx.h" #include "Alert.h" #include "SetPara3Dlg.h" #include "SetPara2Dlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CSetPara3Dlg dialog CSetPara3Dlg::CSetPara3Dlg(CWnd* pParent /*=NULL*/) : CDialog(CSetPara3Dlg::IDD, pParent) { //{{AFX_DATA_INIT(CSetPara3Dlg) //}}AFX_DATA_INIT } void CSetPara3Dlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CSetPara3Dlg) DDX_Control(pDX, IDC_LIST3, m_cjList); DDX_Control(pDX, IDC_LIST2, m_dcjList); DDX_Control(pDX, IDC_LIST1, m_bfList); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CSetPara3Dlg, CDialog) //{{AFX_MSG_MAP(CSetPara3Dlg) ON_BN_CLICKED(IDPREV, OnPrev) ON_BN_CLICKED(IDFINISH, OnFinish) ON_LBN_SELCHANGE(IDC_LIST1, OnSelchangeList1) ON_BN_CLICKED(IDC_CHECKIN, OnCheckin) ON_BN_CLICKED(IDC_CHECKOUT, OnCheckout) ON_LBN_DBLCLK(IDC_LIST3, OnDblclkList3) ON_LBN_DBLCLK(IDC_LIST2, OnDblclkList2) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CSetPara3Dlg message handlers void CSetPara3Dlg::OnPrev() { // TODO: Add your control notification handler code here CDialog::OnOK(); CSetPara2Dlg* pStep1= (CSetPara2Dlg*)GetParent(); pStep1->ShowWindow(SW_SHOW); } void CSetPara3Dlg::OnFinish() { // TODO: Add your control notification handler code here CDialog::OnOK(); CSetPara2Dlg* pStep2= (CSetPara2Dlg*)GetParent(); ::SendMessage(pStep2->m_hWnd,WM_CLOSE,0,0); } BOOL CSetPara3Dlg::OnInitDialog() { CDialog::OnInitDialog(); // TODO: Add extra initialization here //显示和提取数据 _RecordsetPtr r; r.CreateInstance(_uuidof(Recordset)); //显示布防名称 CString s="select bfname from bufangset"; _bstr_t bs=s.AllocSysString(); CAlertApp* pApp=(CAlertApp*)::AfxGetApp(); r->Open(bs,(IDispatch*)pApp->m_pConnection,adOpenStatic,adLockOptimistic,adCmdText); if(r->adoEOF || r->BOF) goto excep1; r->MoveFirst(); while(!r->adoEOF) { m_bfList.AddString(LPTSTR(_bstr_t(r->GetCollect("bfname")))); r->MoveNext(); } excep1: r->Close(); r=NULL; r.CreateInstance(_uuidof(Recordset)); //显示处警名称 s="select cjname from chujingset"; bs=s.AllocSysString(); r->Open(bs,(IDispatch*)pApp->m_pConnection,adOpenStatic,adLockOptimistic,adCmdText); if(r->adoEOF || r->BOF) goto excep2; r->MoveFirst(); while(!r->adoEOF) { m_cjList.AddString(LPTSTR(_bstr_t(r->GetCollect("cjname")))); r->MoveNext(); } excep2: r->Close(); r=NULL; //提取数据 m_dcjStrArray.SetSize(m_bfList.GetCount()+1); for(int i=0;i<m_bfList.GetCount();i++) { r.CreateInstance(_uuidof(Recordset)); CString temp; m_bfList.GetText(i,temp); s="select cjname from bftocj where bfname='" + temp + "'"; bs=s.AllocSysString(); r->Open(bs,(IDispatch*)pApp->m_pConnection,adOpenStatic,adLockOptimistic,adCmdText); if(!r->adoEOF && !r->BOF) m_dcjStrArray[i]=LPTSTR(_bstr_t(r->GetCollect("cjname"))); r->Close(); r=NULL; } m_bfList.SetCurSel(0); m_cjList.SetCurSel(0); OnSelchangeList1(); m_dcjList.SetSel(0); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CSetPara3Dlg::OnSelchangeList1() { // TODO: Add your control notification handler code here int nSel=m_bfList.GetCurSel(); if(nSel==-1) return; int count=analystRs(m_dcjStrArray[nSel]); while(m_dcjList.GetCount()>0) { m_dcjList.DeleteString(0); } for(int i=0;i<count;i++) m_dcjList.AddString(strcj[i]); m_dcjList.SetSel(0); } int CSetPara3Dlg::analystRs(CString cjname) { int count=0; //count:纪录获取的字符串个数 strcj.RemoveAll(); strcj.Add(""); for(int i=0;i<cjname.GetLength();i++) { if(cjname[i]!='@') strcj[count]+=cjname[i]; else { count+=1; strcj.Add(""); } } if(strcj[count]=="") { strcj.RemoveAt(count); count--; } return count+1; } void CSetPara3Dlg::OnCheckin() { // TODO: Add your control notification handler code here if(m_bfList.GetCurSel()==-1) return; for(int i=0;i<m_cjList.GetCount();i++) { if(m_cjList.GetSel(i)) { CString cjname; m_cjList.GetText(i,cjname); for(int j=0;j<m_dcjList.GetCount();j++) { CString dcjname; m_dcjList.GetText(j,dcjname); if(cjname==dcjname) break; } if(j==m_dcjList.GetCount()) { m_dcjList.AddString(cjname); if(m_dcjStrArray[m_bfList.GetCurSel()].Right(1)=="@") m_dcjStrArray[m_bfList.GetCurSel()]+=cjname; else m_dcjStrArray[m_bfList.GetCurSel()]+=("@"+cjname); } } } RefreshRelation(); //写入设置 } void CSetPara3Dlg::OnCheckout() { // TODO: Add your control notification handler code here if(m_bfList.GetCurSel()==-1) return; for(int i=m_dcjList.GetCount()-1;i>=0;i--) { if(m_dcjList.GetSel(i)) m_dcjList.DeleteString(i); } if(m_bfList.GetCurSel()==-1) return; CString dcjname; m_dcjStrArray[m_bfList.GetCurSel()]=""; for(i=0; i<m_dcjList.GetCount();i++) { m_dcjList.GetText(i,dcjname); if(i==0) m_dcjStrArray[m_bfList.GetCurSel()]=dcjname; else m_dcjStrArray[m_bfList.GetCurSel()]+=("@"+dcjname); } RefreshRelation(); } void CSetPara3Dlg::OnDblclkList3() { // TODO: Add your control notification handler code here OnCheckin(); } void CSetPara3Dlg::OnDblclkList2() { // TODO: Add your control notification handler code here OnCheckout(); } void CSetPara3Dlg::RefreshRelation() { if(m_bfList.GetCurSel()==-1) return; CString bfname; m_bfList.GetText(m_bfList.GetCurSel(),bfname); _RecordsetPtr r; r.CreateInstance(_uuidof(Recordset)); CString s="select * from bftocj where bfname ='" + bfname + "'"; _bstr_t bs=s.AllocSysString(); CAlertApp* pApp=(CAlertApp*)::AfxGetApp(); r->Open(bs,(IDispatch*)pApp->m_pConnection,adOpenStatic,adLockOptimistic,adCmdText); if(!r->adoEOF && !r->BOF) { if(m_dcjStrArray[m_bfList.GetCurSel()]=="") r->Delete(adAffectCurrent); else r->PutCollect("cjname",m_dcjStrArray[m_bfList.GetCurSel()].AllocSysString()); r->Update(); } else { r->AddNew(); r->PutCollect("bfname",bfname.AllocSysString()); r->PutCollect("cjname",m_dcjStrArray[m_bfList.GetCurSel()].AllocSysString()); r->Update(); } r->Close(); r=NULL; }